package com.onlygx.dva.common.utils;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  属性复制工具类
 * </p>
 *
 * @author 高祥
 * @since 2022-06-08
 */
public class BeanCopyUtils {

    /**
     * 依赖BeanUtil实现属性拷贝，忽略Null值
     * 2022年6月8日19:05:09 高祥
     */
    public static void cp(Object source, Object target){
        CopyOptions options = CopyOptions.create(null,true,null);
        BeanUtil.copyProperties(source,target,options);
    }

    /**
     * 依赖BeanUtil实现属性拷贝，忽略Null值和指定字段
     * 2022年6月8日19:05:09 高祥
     */
    public static void cp(Object source, Object target,String... properties){
        CopyOptions options = CopyOptions.create(null,true,properties);
        BeanUtil.copyProperties(source,target,options);
    }

    /**
     * List 属性复制
     * 2022年6月8日19:15:08 高祥
     */
    public static <E, T> List<T> convertList2List(List<E> input, Class<T> clazz) {
        List<T> output = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(input)) {
            for (E source : input) {
                T target = org.springframework.beans.BeanUtils.instantiateClass(clazz);
                cp(source, target);
                output.add(target);
            }
        }
        return output;
    }
}
